package com.example.controller;

import com.example.entity.LoginRequest;
import com.example.utils.JwtSuperUtil;
import io.jsonwebtoken.Claims;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

/**
 * 是否需要同时使用配置类和 @CrossOrigin？
 * 1. 两种方式的优先级
 * @CrossOrigin 注解：作用于单个控制器或方法，优先级更高（会覆盖全局配置）
 * 全局 CORS 配置（CorsConfig）：作用于整个应用，是默认配置
 * 2. 你的选择
 * 场景	                    推荐方案
 * 全部接口统一 CORS 规则	    只保留 CorsConfig，移除所有 @CrossOrigin（避免重复配置）
 * 某个接口需要特殊 CORS 规则	保留 CorsConfig + 在特定方法上添加 @CrossOrigin（覆盖全局配置）
 * 3. 你的情况
 * 如果 CorsConfig 中已经配置了全局允许所有域名（allowedOrigins("*")），不需要再在控制器上添加 @CrossOrigin。
 * 保留两者虽然不会报错，但会导致：
 * 配置冗余
 * 维护困难（未来修改时需要同步两处）
 */
@RestController
@RequestMapping("/auth")
public class AuthController {

    @PostMapping("login")
    public ResponseEntity<String> login(@RequestBody LoginRequest request) {
        /**
         * 模拟账号校验（实际应查数据库）
         */
        if ("admin".equals(request.getUsername()) && "123456".equals(request.getPassword())) {
            String token = JwtSuperUtil.generateToken(request.getUsername());
            /**
             * 返回给前端保存
             */
            return ResponseEntity.ok(token);
        } else {
            return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("用户名或密码错误");
        }
    }

    @GetMapping("/me")
    public ResponseEntity<String> me(@RequestHeader("Authorization") String authHeader) {
        String token = authHeader.replace("Bearer ", "");
        Claims claims = JwtSuperUtil.parseToken(token);
        return ResponseEntity.ok(claims.getSubject());
    }

    @GetMapping("/test")
    public ResponseEntity<String> test() {
        return ResponseEntity.ok("CORS 配置生效");
    }

}
